package com.situ.day6.cal;

import org.junit.Test;

import java.lang.String;

public class Demo {
    public static void main(String[] args) {
        // 声明成子类类型，new子类对象
        // 如果子类重写了getResult方法，那么调用的就是子类重写后的方法，
        // 如果子类没有重写，调用的是从父类继承的方法
        Add add = new Add(3, 2);
        int result1 = add.getResult();
        System.out.println(result1);

        // 声明称父类类型，new子类对象
        // 如果子类重写了getResult方法，那么调用的就是子类重写后的方法，
        // 如果子类没有重写，调用的是从父类继承的方法
        // Student extends Person
        // Person person = new Student();
        // Cal cal = add;
        Cal cal = new Add(3,2);
        int result2 = cal.getResult();
        System.out.println(result2);// 5

        // cal声明成的是父类类型，既可以指向new出来的Add对象，
        // 又可以指向new出来的Sub对象
        cal = new Sub(3, 2);
        int result3 = cal.getResult();
        System.out.println(result3);// 1
    }

    @Test
    public void test1() {
        // 'Cal' is abstract; cannot be instantiated
        // Cal cal = new Cal();
        Cal cal = new Add(3, 5);
        cal.getResult();
    }

    @Test
    public void testFactory() {
        // Client

        // Cal cal = new Add(3, 5);
        // cal = new Sub(3, 5);

        // "+"
        Cal cal = CalFactory.createCal(2);
        cal.num1 = 3;
        cal.num2 = 5;
        int result = cal.getResult();
        System.out.println(result);
    }
}
